import { createRouter, createWebHashHistory } from 'vue-router'
import RoutesConifg from './config'
import store from '../store/index'
const routes = [
  {
    path: '/login',
    name: 'login',
    component: () => import('@/views/Login.vue') // 路由懒加载
  },
  {
    path: '/mainbox',
    name: 'mainbox',
    component: () => import('@/views/MainBox.vue'),
    // main的嵌套路由，后面根据权限动态添加
  },
  {
    // 匹配路径
    path: '/:pathMatch(.*)*',
    name: "NOTFOUND",
    component: () => import('@/views/error/404.vue')
  },

]
// 创建路由
const router = createRouter({
  history: createWebHashHistory(),
  routes,
})


// 路由守卫
router.beforeEach((to, from, next) => {
  // 判断是否为跳转页面为login
  if (to.name === 'login') {
    next()
  } else {
    // 未授权，则重定向到登录页面
    if (!localStorage.getItem('token')) {
      next({
        path: '/login'
      })
      // 如果授权（已经登陆过了）next（）
    } else {
      
      if (!store.state.isGetterRouter) {
        // 每一次进入到后台的时候，首先先将mainbox清除掉，这样子就会把子路由也给卸载掉
        router.removeRoute("mainbox")
        ConfigRouter()
        next({
          path: to.fullPath
        })
      } else {
        next()
      }
    }
  }
})
// 创建方法动态添加路由
const ConfigRouter = () => {
  // 判断如果不存在mainbox，那么就直接新增
  if (!router.hasRoute("mainbox")) {
    router.addRoute({
      path: '/mainbox',
      name: 'mainbox',
      component: () => import('@/views/MainBox.vue'),
    })
  }
  // 添加路由到mainbox盒子里面
  RoutesConifg.forEach(item => {
    // 检查路由是否已经添加过
    if (router.hasRoute(item.name)) {
      return
    }
    checkPermission(item) && router.addRoute("mainbox", item)
  })
  // 改变isGetterRouter为true
  store.commit("changeGetterRouter", true)
}

const checkPermission = (item) => {
  if (item.requireAdmin) {
    return store.state.userInfo.role === 1
  }
  return true
}
export default router
